package org.xx.armory.swing.builders;

import org.xx.armory.objectparser.LineInfo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import static org.xx.armory.commons.Validators.greaterThanOrEqual;

public class TableModel
        extends AbstractComponentModel
        implements ComponentModel {
    private final List<TableColumnModel> columns;
    private int rowSize;

    /**
     * 构造解析对象。
     *
     * @param lineInfo
     *         定义组件的位置信息。
     * @param name
     *         组件的名字，自动去掉首尾空格。
     * @param visible
     *         组件是否可见。
     * @param rowSize
     *         表格滚动区域中可见的行数（不包含标题行）。
     * @param columns
     *         表格的列模型集合。
     */
    public TableModel(
            LineInfo lineInfo,
            String name,
            boolean visible,
            int rowSize,
            Collection<? extends TableColumnModel> columns
    ) {
        super(lineInfo, name, visible);

        this.rowSize = greaterThanOrEqual(rowSize, "rowSize", 0);
        this.columns = columns != null ? new ArrayList<>(columns) : Collections.emptyList();
    }

    /**
     * 获取表格的显示行数（不包含标题行）。
     *
     * @return 表格的显示行数（不包含标题行）。
     */
    public int getRowSize() {
        return this.rowSize;
    }

    /**
     * 获取表格的列模型集合。
     *
     * @return 表格的列模型集合。
     */
    public List<TableColumnModel> getColumns() {
        return Collections.unmodifiableList(this.columns);
    }
}
